<?php

namespace App\Admin\Extensions;

use App\RiskOrder;
use App\Services\RuleService;
use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Facades\Excel;

use Carbon\Carbon;
use Encore\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;



class RiskOrderExporter extends AbstractExporter implements FromCollection, WithMapping, WithHeadings
{
    use Exportable;

    protected $start;
    protected $end;
    protected $dengji;
    protected $rule;
    protected $live_id;

    protected $tel_name = [
        1 => '正常',
        2 => '停机',
        3 => '销号',
        4 => '异常',
    ];
    //空：无结果 1：正常 2：停机 3：销号 4：异常

    public function __construct()
    {
        //在构造器里获取筛选条件
        $this->dengji = request()->get('dengji');

        $this->start = data_get(request()->get('created_at'), 'start') ?? Carbon::create(2000);
        $this->end = data_get(request()->get('created_at'), 'end') ?? Carbon::create(2100);
        $this->rule = new RuleService();
    }

    protected $fileName = '风控记录.xlsx';

    public function headings(): array
    {
        return [
            'ID',
            '订单号',
            '等级',
            '规则名称',
            '三要素',
            '手机在网状态',
            '信息验证规则-法院信息详情个人高级版',
            '按身份证号查询，近6个月在非银机构申请次数',
            '按身份证号查询，近3个月在非银机构申请次数','近1个月在非银机构申请次数xx','按身份证号查询，近15天在非银机构申请次数','按身份证号查询，近7天在非银机构申请次数','按身份证号查询，近15天在银行机构周末申请次数','按身份证号查询，近1个月在非银机构周末申请次数','按手机号查询，近15天在非银机构夜间申请机构数','按身份证号查询，近1个月在非银机构夜间申请次数','按身份证号查询，近15天申请线上小额现金贷的次数','按身份证号查询，近7天申请线上小额现金贷的次数','特殊名单1','特殊名单2','趋势异常-基础款a','消费行为预测-基础款a','履约意愿-基础款a','按身份证号查询，近3天在3C机构申请总次数','按身份证号查询，近14天在3C机构申请总次数','按身份证号查询，近1个月在3C机构申请总次数','按身份证号查询，近3个月在3C机构申请总次数','按身份证号查询，近6个月在3C机构申请总次数','按身份证号查询，近12个月在3C机构申请总次数','按手机号查询，近7天在3C机构申请总次数','按手机号查询，近1个月在3C机构申请总次数','偿债压力指数','团伙欺诈排查','裁判文书','法院被执行人-限高版'
           ];
    }

    //map()里没什么特殊的，跟简单格式化数据一样
    public function map($row): array
    {
        $bairong = json_decode($row->data, true);
        if(empty($bairong['infoverify_report_detail']['TelCheck_s']['result'])){
            $TelCheck_s = '查无此号';
        }else{
            $TelCheck_s = $bairong['infoverify_report_detail']['TelCheck_s']['result']=='1'?'一致':'不一致';
        }
        if(empty($bairong['infoverify_report_detail']['TelStatus']['data']['value'])){
            $TelStatus = '无结果';
        }else{

            $TelStatus = $this->tel_name[$bairong['infoverify_report_detail']['TelStatus']['data']['value']];
        }
//        空：无结果 1：正常 2：停机 3：销号 4：异常（包括预销号、不在网）
        $data = [
            $row->id,
            $row->ordersn,
            $row->dengji,
            $row->gzmc,
            $TelCheck_s,
            $TelStatus,


        ];

        return  $data;
    }

    //主要在collection()方法，我们通过实现FromCollection接口，进行自定义需要导出的数据，
    //不然会以当前调用该导出方法的modal为主表，这里如果不重写collection()方法，就会以answers表为主表
    public function collection()
    {
        $query = RiskOrder::query()
            ->whereBetween('created_at', [$this->start, $this->end]);
        if ($this->dengji) {
            $query = $query->where('dengji', $this->dengji);
        }
        return $query->get();
    }

    public function export()
    {
        $this->download($this->fileName)->prepare(request())->send();
        exit;
    }
}
